home *** CD-ROM | disk | FTP | other *** search
- DATA SEGMENT PUBLIC 'DATA'
- ; PUBLIC AND EXTERN DATA
- ; DECLORATIONS GO HERE
- DATA ENDS
- DGROUP GROUP DATA
- ASSUME CS: INTRS , DS : DGROUP , SS : DGROUP
-
- INTRS SEGMENT 'CODE'
- PUBLIC INTR
- INTR PROC FAR
- PUSH BP ; SAVE OLD FRAME POINTER
- MOV BP,SP ; GET FRAME POINTER
- PUSH DS ; SAVE DATA SEG REG
- PUSH CS
- POP DS ; MAKE THIS CODE ADDRESSABLE
- MOV AX,10[BP] ; GET INTERUPT VALUE
- MOV SI,OFFSET CS:INT_INS+1 ; SET INTERUPT INSTRUCTION
- MOV CS:[SI],AL
- MOV SI,6[BP] ; GET REG PACK OFFSET
- MOV AX,8[BP] ; GET REG PACK SEGMENT
- MOV DS,AX ; MAKE REG PACK ADDRESSABLE
- MOV CS:REG_PACK_DS,AX ; SAVE REG PACK SEG
- MOV CS:REG_PACK_OFF,SI ; SAVE REG PACK OFFSET
- ;------------------- PUSH USER REGS ------------------------------
- PUSH 12H[SI]
- PUSH 10H[SI]
- PUSH 0EH[SI]
- PUSH 0CH[SI]
- PUSH 0AH[SI]
- PUSH 08H[SI]
- PUSH 06H[SI]
- PUSH 04H[SI]
- PUSH 02H[SI]
- PUSH [SI]
- ;----------------- APPLICATION ----------------------------------------
- ; SET UP REGISTERS AS REQUIRED FOR INTERUPT INSTRUCTION
- POP AX
- POP BX
- POP CX
- POP DX
- POP BP
- POP SI
- POP DI
- POP DS
- POP ES
- POPF
- INT_INS: INT 10H ; DUMMY INT WILL BE REPLACE WHEN EXECUTED
- ; SAVE RETURNED REGISTER VALUES
- PUSHF
- PUSH ES
- PUSH DS
- PUSH DI
- PUSH SI
- PUSH BP
- PUSH DX
- PUSH CX
- PUSH BX
- PUSH AX
- ; POP INTERUPT REGISTERS BACK TO THEIR HOME
- PUSH CS
- POP DS
- MOV AX,CS:REG_PACK_DS ; SAVE REG PACK SEG
- MOV SI,CS:REG_PACK_OFF ; SAVE REG PACK OFFSET
- MOV DS,AX ; MAKE REG PACK ADDRESSABLE AGAIN
- POP [SI]
- POP 02H[SI]
- POP 04H[SI]
- POP 06H[SI]
- POP 08H[SI]
- POP 0AH[SI]
- POP 0CH[SI]
- POP 0EH[SI]
- POP 10H[SI]
- POP 12H[SI]
- ;----------------- END APP --------------------------------------------
- POP DS ; RESTORE OLD DATA SEGMENT
- POP BP ; RESTORE BASE POINTER REGISTER
- RET 6 ; RETURN POP FOUR BYTES
- INTR ENDP
- REG_PACK_DS DW ?
- REG_PACK_OFF DW ?
- INTRS ENDS
- END